package edu.cdnu.dao;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;

import edu.cdnu.pojo.CourseClassPojo;
import edu.cdnu.pojo.CoursePojo;
import edu.cdnu.pojo.CourseStudentPojo;
import edu.cdnu.pojo.CourseTeacherPojo;

/**
 * 课程表操作的Dao层
 * @author ASUS AsingZ
 */
@Mapper
public interface CourseDao {
	
	/**
	 * 通过id查询课程
	 * @param courseId id为空就返回所有课程列表
	 * @return
	 */
	public List<CoursePojo> selectCourseListByCourseId(Integer courseId);
	
	/**
	 * 通过课程id查询 课程--教师 对应关系列表
	 * @param courseId 不能为空
	 * @return
	 */
	public List<CourseTeacherPojo> selectCourseTeacherRelationshipListByCourseId(int courseId);
	
	/**
	 * 通过课程id查询 课程--班级 对应关系列表
	 * @param courseId 
	 * @return
	 */
	public List<CourseClassPojo> selectCourseClassRelationshipListByCourseId(int courseId);
	
	/**
	 * 通过课程id查询 课程--学生 对应关系列表
	 * @param courseId
	 * @return
	 */
	public List<CourseStudentPojo> selectCourseStudentRelationshipListByCourseId(int courseId);
	
	/**
	 * 新增一个课程
	 * @param coursePojo
	 */
	public void insertCourse(CoursePojo coursePojo);
	
	/**
	 * 修改课程信息
	 * @param coursePojo
	 */
	public void updateCourseByCourseId(CoursePojo coursePojo);
	
	/**
	 * 查询课程教师对应表
	 * @param courseTeacherPojo 该对象的属性不为空就能作为条件
	 * @return
	 */
	public List<CourseTeacherPojo> selectCourseTeacherListByCourseTeacherPojo(CourseTeacherPojo courseTeacherPojo);
	
	/**
	 * 插入一个课程教师对应关系
	 * @param courseTeacherPojo
	 */
	public void insertCourseTeacher(CourseTeacherPojo courseTeacherPojo);
	
	/**
	 * 插入课程教师对应关系，list
	 * @param courseTeacherPojoList
	 */
	public void insertCourseTeacherByList(List<CourseTeacherPojo> courseTeacherPojoList);
	
	/**
	 * 删除一条课程教师对应关系
	 * @param id
	 */
	public void deleteCourseTeacherById(int id);
	
	/**
	 * 删除课程教师对应关系,list
	 * @param idList
	 */
	public void deleteCourseTeacherByIdList(List<Integer> idList);
	
	/**
	 * 查询某个课程的教师的id列表，升序
	 * @param courseId
	 * @return
	 */
	public List<Integer> selectTeacherIdListByCourseId(int courseId);
	
	/**
	 * 删除课程教师
	 * @param courseTeacherPojo
	 */
	public void deleteCourseTeacherByCourseTeacherPojo(CourseTeacherPojo courseTeacherPojo);
	
	/**
	 * 批量增加课程班级对应关系，list
	 * @param courseClassList 
	 */
	public void insertCourseClassByList(List<CourseClassPojo> courseClassList);
	
	/**
	 * 通过老师id查询该老师上的课的课程id列表
	 * @param teacherId
	 * @return
	 */
	public List<Integer> selectCourseIdListByTeacherId(int teacherId);
	
	/**
	 * 通过课程id的列表查询课程
	 * @param idList
	 * @return
	 */
	public List<CoursePojo> selectCourseListByCourseIdList(List<Integer> idList);
	
	/**
	 * 通过课程id列表查询班级id列表
	 * @param idList
	 * @return
	 */
	public List<Integer> selectClassIdListByCourseIdList(List<Integer> idList);
	
	/**
	 * 通过班级id查询出课程id的列表
	 * @param classId
	 * @return
	 */
	public List<Integer> selectCourseIdListByClassIdList(int classId);
	
	/**
	 * 通过一定条件查询 学生-课程对应关系
	 * @return
	 */
	public CourseStudentPojo selectCourseStudentPojoByCourseStudentPojo(CourseStudentPojo courseStudentPojo);
	
	/**
	 * 修改学生-课程对应关系
	 * @param courseStudentPojo
	 */
	public void updateCourseStudent(CourseStudentPojo courseStudentPojo);
	
	/**
	 * 
	 * 增加访问量
	 * @param courseStudentId
	 */
	public void addCourseStudentVisitTime(int courseStudentId);
	
	/**
	 * 新增一个课程-学生对应关系
	 * @param courseStudentPojo
	 */
	public void insertCourseStudent(CourseStudentPojo courseStudentPojo);
	
	/**
	 * 通过课程id查询 课程-学生的对应关系
	 * @param courseId
	 * @return
	 */
	public List<CourseStudentPojo> selectCourseStudentListByCourseId(int courseId);
	
	/**
	 * 通过id list来删除 课程-班级对应关系
	 * @param courseClassId
	 */
	public void deleteCourseClassById(List<Integer> courseClassIdList);
}
